크롬 하위버전 SyntaxError - Invalid regular expression 에러 해결하기

📅 2024. 04. 12

문제

  • Sentry에서 SyntaxError: Invalid regular expression 에러 확인됨
  • 크롬 하위버전에서 에러 발생하여 화면이 렌더링되지 않는 문제로 확인

대상

  • Chrome < 69
  • Zod
    • >= 3.21.0
    • < 3.22.4

트러블슈팅

  • Sentry에 보고된 Chromium 65 버전을 저장소를 통해 다운로드 후, 직접 해당 URL로 접근한 결과 원인을 찾을 수 있었음
  • 원인 코드는 다음과 같음
const emojiRegex = /^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u;
  • JavaScript는 정규식 표현에 유니코드를 사용하여 원하는 문자열들을 쉽게 구분할 수 있는 기능을 지원함
  • 유니코드 중 Extended_Pictographic(ECMAScript 스펙)은 크롬 69 버전부터 지원
    • Extended_Pictographic은 기술적으로는 이모지가 아닌 "픽토그래픽" 문자열을 포함하는 이모지
    • ex: "1😂💯♡⌨︎"에서 '😂', '💯' 뿐만 아니라 '♡''⌨︎'까지 모두 포함
  • 정확한 문제 발생 버전 확인을 위해 65 ~ 70 버전을 다운받은 뒤 실행해보니 69 버전부터는 코드가 정상 동작하는 것을 확인

해결책

  • zod 버전을 v3.22.4로 업그레이드
  • 3.22.4부터는 emoji 관련 정규식을 z.string().emoji()를 사용하는 경우에만 사용함
  • 주의사항: 만약 z.string().emoji()를 사용하는 스키마가 있다면, 여전히 하위 버전에서 에러가 발생할 수 있음. 필요한 경우, z.string().regex()를 통해 직접 정규식을 구현하는 방법을 권장함

링크